# -*- coding: utf-8 -*-
"""
Created on Sun Sep 23 12:05:59 2018

@author: cheny
"""
# 默认参数
def stu(name, age, sex = "男", hobby = "Python"):
    print("我的名字是{0}，我的年龄是{1}， 我是{2}生， 我的爱好是{3}"\
          .format(name, age, sex, hobby))
    print("*" * 20)

#默认参数调用
stu("张三", 20) # 常规调用，正确。后面两个参数为默认参数
stu("李四", 45, "女", "C++")  #常规调用，正确，第三个参数为默认参数重新赋值，第四个默认参数不赋值
stu("李四", 45, sex = "女") #正确，第三个参数为默认参数，第四个参数为默认参数
#stu("李四", 45, sex = "女", "Java")    #调用错误，它会将第三个参数当成关键字参数，则第四个参数必为关键字参数，而不会将第四个参数当成默认参数，因为关键字参数肯定是在最后面的
stu("李四", 45, hobby = "Java") #正确，表示第三个参数是默认参数
stu("李四", 45, "女", hobby = "Java")  #正确，第三个为默认参数，第四个为关键字参数
stu("李四", 45, sex = "女", hobby = "Java") #正确，第三个参数和第四个参数都会当成关键字参数
stu("李四", 45, hobby = "Java", sex = "女") #正确，进一步证实了第三个和第四个参数是关键字参数



#收集参数
def stu(*args):
    print(type(args))   #打印看一下args 是什么数据类型
    for item in args:
        print(item)

#调用
stu("zhangsan", "lisi", "wangwu", "zhaoliu")
stu("zhangsan")
stu()



# 收集参数关键字参数用法
def stu(**kwargs):
    print(type(kwargs))
    for k,v in kwargs.items():
        print(k, "--->", v)
        
stu(name="zhangsan", age=18, hobby="Python")
stu(name="lisi")
stu()


#参数混用
def stu(name, age, *args, hobby="Python", **kwargs):
    print("My name is {0}, and I am {1} years old, My hobby is {2}".format(name,age, hobby))
    for item in args:
        print(item)
    for k, v in kwargs.items():
        print(k, "--->", v)
    print("*" * 20)

#调用
stu("zhangsan", 25) #正确，args和 kwargs都可以没有，hobby为默认参数
stu("zhangsan", 25, hobby="Java") #正确，args和kwargs都可以没有，hobby为关键字参数
stu("zhangsan", 25, "aaaa","bbbb") #正确，此时有args参数，hobby为默认参数，所以hobby和kwargs都可以没有
stu("zhangsan", 25, "aaaa", "bbbb", "cccc", hobby="C++") #正确，此时没有kwargs肯定没有问题       
stu("zhangsan", 25, sex="nv", hight=175)  #正确，此时args和hobby都没有，可知hobby为默认参数，但是kwargs是有值的
stu("zhangsan", 25, "aaaa", "bbbb", "cccc", hobby="C++",sex="nv", hight=175) #所有参数都有值，肯定是可以的


#函数文档
def stu(name, age, *args, hobby="Python", **kwargs):
    """
    函数功能：打印学生信息
    :param name: 学生姓名
    :param age: 学生年龄
    :param args: 收集参数列表
    :param hobby: 学生爱好
    :param kwargs: 关键字收集参数列表
    :return: None
    """
    print("My name is {0}, and I am {1} years old, My hobby is {2}".format(name, age, hobby))
    for item in args:
        print(item)
    for k, v in kwargs.items():
        print(k, "--->", v)
    print("*" * 20)

help(stu)
print(stu.__doc__)
       






















